from django.contrib.auth.models import User
from django.db import models

# Create your models here.
# 需要文章（Article）、分类（Category）以及标签（Tag）等三个表格
# 创建分类模型类
from django.urls import reverse


class Category(models.Model):
    name = models.CharField(max_length=100)


    def __str__(self):
        return str(self.name)

#创建标签模型类
class Tag(models.Model):

    name = models.CharField(max_length=100)

    def __str__(self):
        return str(self.name)


#创建文章模型类
class Articles(models.Model):
    # 文章标题
    title = models.CharField(max_length=70)
    # 文章正文，我们使用了 TextField。
    # 存储比较短的字符串可以使用 CharField，但对于文章的正文来说可能会是一大段文本，
    # 因此使用 TextField 来存储大段文本。
    body = models.TextField()

    # 这两个列分别表示文章的创建时间和最后一次修改时间，存储时间的字段用 DateTimeField 类型。
    created_time = models.DateTimeField()
    modified_time = models.DateTimeField()
    # 文章摘要
    summary = models.CharField(max_length=200, blank=True)
    # 一篇文章只能对应一个分类，但是一个分类下可以有多篇文章，
    # 所以我们使用的是 ForeignKey，即一对多的关联关系
    # 标签和文章是多对多
    category = models.ForeignKey(Category)
    tags = models.ManyToManyField(Tag, blank=True)

    author = models.ForeignKey(User)

    def __str__(self):
        return str(self.title)


        # 自定义 get_absolute_url 方法
        # 从 django.urls.py 中导入 reverse 函数,它的第一个参数的值是 'blog:detail'，
        # 意思是 blog 应用下的 name=detail 的函数

    def get_absolute_url(self):
        return reverse('blog:detail', kwargs={'pk': self.pk})

    class Meta:
        ordering = ['-created_time']